package com.tanhua.dubbo.api;

import com.tanhua.model.mongo.Comment;
import com.tanhua.model.mongo.LikeComment;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.FindAndModifyOptions;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;


@DubboService
public class LikeCommentApiImpl implements LikeCommentApi {

    @Autowired
    private MongoTemplate mongoTemplate;


    @Override
    public LikeComment findById(String movementId) {
        return mongoTemplate.findById(movementId,LikeComment.class);
    }

    @Override
    public Boolean hasComment(String commentId, long userId) {
        Query query = Query.query(Criteria.where("commentId").is(commentId).and("userId").is(userId));
       return  mongoTemplate.exists(query,LikeComment.class);
    }

    /**
     * 取消评论点赞
     * @param commentId
     * @param userId
     * @return
     */
    @Override
    public Integer deletelike(String commentId,Long userId) {
        // 根据传来的动态id 进行更新 (条件查询)
        Query query = Query.query(Criteria.where("commentId").is(commentId).and("userId").is(userId));
        // 3.从数据库删除
        //mongoTemplate.remove(query,LikeComment.class);
        mongoTemplate.remove(query, LikeComment.class);

        // 根据传来的动态id 进行更新 (条件查询)
        Query query1 = Query.query(Criteria.where("_id").is(commentId));
        // 4.更新动态表中的对应字段
        Update update = new Update();
        // 给那个字段加一
        if (mongoTemplate.exists(query1, Comment.class)){
            update.inc("likeCount", -1);
        }
        // 设置更新参数
        FindAndModifyOptions options = new FindAndModifyOptions();
        // 获取更新后的最新数据
        options.returnNew(true);
        // findAndModify 更新某个字段 并且返回更新后的数据(查询条件,要更新的字段和数值,更新的一些设置属性 可以指定拿到更新后的属性,当前操作实体类的对象)
        Comment modify = mongoTemplate.findAndModify(query1, update, options, Comment.class);
        // 5.获取最新的评论数

        return modify.getLikeCount();
    }
}